/* vue Transition */
/* 默认 */
.out-in-enter-from,
.out-in-leave-to {
  transform: translateX(20px);
  opacity: 0;
}
.out-in-enter-to,
.out-in-leave-from {
  opacity: 1;
}
.out-in-enter-active {
  transition: all 0.7s ease;
}
.out-in-leave-active {
  transition: all 0.3s cubic-bezier(1, 0.6, 0.6, 1);
}

/* 淡入淡出 Fade */
.fade-enter-active,
.fade-leave-active {
  transition: opacity 0.3s ease-in-out;
}
.fade-enter-from,
.fade-leave-to {
  opacity: 0;
}

/* 缩放动画 Scale */
.scale-enter-active,
.scale-leave-active {
  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.scale-enter-from {
  transform: scale(0.5);
}
.scale-leave-to {
  transform: scale(1.5);
}

/* 滑动动画 Slide */
.slide-enter-active,
.slide-leave-active {
  transition: transform 0.4s ease-out;
}
.slide-enter-from {
  transform: translateX(100%);
}
.slide-leave-to {
  transform: translateX(-100%);
}

/* 旋转进入 Rotate */
.rotate-enter-active {
  transition: all 0.6s cubic-bezier(0.68, -0.55, 0.27, 1.55);
}
.rotate-enter-from {
  transform: rotate(-180deg) scale(0.5);
  opacity: 0;
}
.rotate-leave-to {
  transform: rotate(180deg) scale(1.2);
  opacity: 0;
}

/* 3D翻转 Flip */
.flip-enter-active,
.flip-leave-active {
  transition: transform 0.7s;
  backface-visibility: hidden;
}
.flip-enter-from {
  transform: rotateY(180deg);
}
.flip-leave-to {
  transform: rotateY(-180deg);
}

/* 弹性滑动 Bounce */
.bounce-enter-active {
  animation: bounce-in 0.5s;
}
.bounce-leave-active {
  animation: bounce-out 0.5s;
}
@keyframes bounce-in {
  0% {
    transform: scale(0.9);
    opacity: 0;
  }
  50% {
    transform: scale(1.05);
  }
  100% {
    transform: scale(1);
    opacity: 1;
  }
}
@keyframes bounce-out {
  0% {
    transform: scale(1);
    opacity: 1;
  }
  50% {
    transform: scale(1.05);
  }
  100% {
    transform: scale(0.9);
    opacity: 0;
  }
}

/* 模糊过渡 Blur */
.blur-enter-active,
.blur-leave-active {
  transition: all 0.4s ease;
}
.blur-enter-from {
  filter: blur(20px);
  opacity: 0;
}
.blur-leave-to {
  filter: blur(20px);
  opacity: 0;
}

/* 卡片切换 Card */
.card-enter-active,
.card-leave-active {
  transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
  transform-origin: center top;
}
.card-enter-from {
  transform: perspective(800px) rotateX(-60deg);
  opacity: 0;
}
.card-leave-to {
  transform: perspective(800px) rotateX(60deg);
  opacity: 0;
}
